<!DOCTYPE html>
<html xmlns="http://www.w3.org/1999/xhtml" lang="en" xml:lang="en">
<head>
  <meta charset="utf-8" />
  <meta name="generator" content="pandoc" />
  <meta name="viewport" content="width=device-width, initial-scale=1.0, user-scalable=yes" />
  <title>Release Notes for STM32CubeC0 HAL and LL drivers</title>
  <style>
    code{white-space: pre-wrap;}
    span.smallcaps{font-variant: small-caps;}
    div.columns{display: flex; gap: min(4vw, 1.5em);}
    div.column{flex: auto; overflow-x: auto;}
    div.hanging-indent{margin-left: 1.5em; text-indent: -1.5em;}
    /* The extra [class] is a hack that increases specificity enough to
       override a similar rule in reveal.js */
    ul.task-list[class]{list-style: none;}
    ul.task-list li input[type="checkbox"] {
      font-size: inherit;
      width: 0.8em;
      margin: 0 0.8em 0.2em -1.6em;
      vertical-align: middle;
    }
    .display.math{display: block; text-align: center; margin: 0.5rem auto;}
  </style>
  <link rel="stylesheet" href="_htmresc/mini-st_2020.css" />
  <link rel="icon" type="image/x-icon" href="_htmresc/favicon.png" />
  <!--[if lt IE 9]>
    <script src="//cdnjs.cloudflare.com/ajax/libs/html5shiv/3.7.3/html5shiv-printshiv.min.js"></script>
  <![endif]-->
</head>
<body>
<div class="row">
<div class="col-sm-12 col-lg-4">
<center>
<h1 id="release-notes-for-stm32cubec0-hal-and-ll-drivers">Release Notes
for <mark>STM32CubeC0 HAL and LL drivers</mark></h1>
<p>Copyright ©  2022 STMicroelectronics<br />
</p>
<a href="https://www.st.com" class="logo"><img
src="_htmresc/st_logo_2020.png" alt="ST logo" /></a>
</center>
<h1 id="purpose">Purpose</h1>
<p>The STM32Cube HAL and LL, an STM32 abstraction layer embedded
software, ensure maximized portability across STM32 portfolio.</p>
<p>The portable APIs layer provides a generic, multi instanced and
simple set of APIs to interact with the upper layer (application,
libraries and stacks). It is composed of native and extended APIs set.
It is directly built around a generic architecture and allows the
build-upon layers, like the middleware layer, to implement its functions
without knowing in-depth the used STM32 device. This improves the
library code reusability and guarantees an easy portability on other
devices and STM32 families.</p>
<p>The Low Layer (LL) drivers are part of the STM32Cube firmware HAL
that provides a basic set of optimized and one-shot services. The Low
layer drivers, contrary to the HAL ones are not fully portable across
the STM32 families; the availability of some functions depends on the
physical availability of the relative features on the product. The Low
Layer (LL) drivers are designed to offer the following features:</p>
<ul>
<li>New set of inline functions for direct and atomic register
access</li>
<li>One-shot operations that can be used by the HAL drivers or from
application level</li>
<li>Full independence from HAL and standalone usage (without HAL
drivers)</li>
<li>Full features coverage of all the supported peripherals</li>
</ul>
</div>
<section id="update-history" class="col-sm-12 col-lg-8">
<h1>Update History</h1>
<div class="collapse">
<input type="checkbox" id="collapse-section6" checked aria-hidden="true">
<label for="collapse-section6" checked aria-hidden="true">V1.4.0 /
05-February-2025</label>
<div>
<h2 id="main-changes">Main Changes</h2>
<ul>
<li>Maintenance Release of STM32CubeC0 HAL/LL Drivers supporting
<strong>STM32C011xx/C031xx/C051xx/C071xx/C091xx/C092xx</strong>
devices</li>
<li>General updates to fix known defects and implementation
enhancements</li>
</ul>
<h3 id="hal-drivers-updates"><strong>HAL Drivers updates</strong></h3>
<ul>
<li>HAL ADC driver:
<ul>
<li>Change ADC calibration procedure</li>
</ul></li>
<li>HAL RCC driver:
<ul>
<li>Add notes to highlight HSI48 clock division factor update limitation
when HSI48 oscillator is selected as system clock</li>
</ul></li>
<li>HAL TIM driver:
<ul>
<li>Fix update flag (UIF) clearing in TIM_Base_SetConfig</li>
</ul></li>
<li>HAL UART driver:
<ul>
<li>Correct references to HAL_UARTEx_WakeupCallback and to
HAL_UART_WAKEUP_CB_ID define, according to serie capabilities</li>
<li>Provide accurate position in RxEventCallback when ReceptionToIdle
mode is used with DMA, when UART and DMA interrupts process is
delayed</li>
</ul></li>
</ul>
<h3 id="ll-drivers-updates"><strong>LL Drivers updates</strong></h3>
<ul>
<li>LL USART driver:
<ul>
<li>Solve Coverity out-of-bound memory access warning in use of
USART_PRESCALER_TAB array</li>
</ul></li>
</ul>
<p>Note: HAL/LL Backward compatibility ensured by legacy defines.</p>
<h2 id="known-limitations">Known Limitations</h2>
<ul>
<li>None</li>
</ul>
<h2 id="backward-compatibility">Backward Compatibility</h2>
<ul>
<li>Not applicable</li>
</ul>
</div>
</div>
<div class="collapse">
<input type="checkbox" id="collapse-section5" aria-hidden="true">
<label for="collapse-section5" aria-hidden="true">V1.3.0 /
30-October-2024</label>
<div>
<h2 id="main-changes-1">Main Changes</h2>
<ul>
<li>Official Release of STM32CubeC0 Firmware package supporting
<strong>STM32C051xx</strong> and <strong>STM32C091/92xx</strong>
devices</li>
<li>General updates to fix known defects and implementation
enhancements</li>
</ul>
<h3 id="hal-drivers-updates-1"><strong>HAL Drivers updates</strong></h3>
<ul>
<li>HAL generic driver:
<ul>
<li>Update HAL configuration template file</li>
</ul></li>
<li>HAL ADC driver:
<ul>
<li>Add missing callbacks in ADC_HandleTypeDef</li>
<li>Rework of const qualifier to be compliant with MISRA rule 8.13</li>
</ul></li>
<li>HAL DMA driver:
<ul>
<li>Rework of const qualifier to be compliant with MISRA rule 8.13</li>
</ul></li>
<li>HAL FLASH driver:
<ul>
<li>Fix inverted OB_IRH_ENABLE and OB_IRH_DISABLE definitions</li>
</ul></li>
<li>HAL I2C driver:
<ul>
<li>Update function HAL_I2C_IsDeviceReady() to take into account the
number of trials</li>
<li>Move the prefetch process in function HAL_I2C_Slave_Transmit</li>
</ul></li>
<li>HAL PCD driver:
<ul>
<li>Support bulk transfer in double buffer mode</li>
</ul></li>
<li>HAL RCC driver:
<ul>
<li>Update function HAL_RCC_GetClockConfig() to take into account the
RCC_CR_SYSDIV</li>
</ul></li>
<li>HAL SPI driver:
<ul>
<li>Rework of const qualifier to be compliant with MISRA rule 8.13</li>
</ul></li>
<li>HAL UART driver:
<ul>
<li>Correct DMA Rx abort procedure impact on ongoing Tx transfer in
polling mode</li>
</ul></li>
</ul>
<h3 id="ll-drivers-updates-1"><strong>LL Drivers updates</strong></h3>
<ul>
<li>LL ADC driver:
<ul>
<li>Rework of const qualifier to be compliant with MISRA rule 8.13</li>
</ul></li>
<li>LL DMA driver:
<ul>
<li>Rework of const qualifier to be compliant with MISRA rule 8.13</li>
</ul></li>
<li>LL USB driver:
<ul>
<li>Support bulk transfer in double buffer mode</li>
</ul></li>
</ul>
<p>Note: HAL/LL Backward compatibility ensured by legacy defines.</p>
<h2 id="known-limitations-1">Known Limitations</h2>
<ul>
<li>None</li>
</ul>
<h2 id="backward-compatibility-1">Backward Compatibility</h2>
<ul>
<li>Not applicable</li>
</ul>
</div>
</div>
<div class="collapse">
<input type="checkbox" id="collapse-section4" aria-hidden="true">
<label for="collapse-section4" aria-hidden="true">V1.2.0 /
05-June-2024</label>
<div>
<h2 id="main-changes-2">Main Changes</h2>
<ul>
<li>Official Release of STM32CubeC0 Firmware package supporting
<strong>STM32C071xx</strong> devices</li>
<li>General updates to fix known defects and implementation
enhancements</li>
</ul>
<h3 id="hal-drivers-updates-2"><strong>HAL Drivers updates</strong></h3>
<ul>
<li>HAL generic driver:
<ul>
<li>Remove invalid HAL_SYSCFG_EnableIOAnalogSwitchBooster() and
HAL_SYSCFG_DisableIOAnalogSwitchBooster() APIs</li>
<li>Rename __HAL_RCC_APB1_FORCE_RESET and __HAL_RCC_APB2_FORCE_RESET
macros by __HAL_RCC_APB1_GRP1_FORCE_RESET and
__HAL_RCC_APB1_GRP2_FORCE_RESET</li>
<li>Rename __HAL_RCC_APB1_RELEASE_RESET and __HAL_RCC_APB2_RELEASE_RESET
macros by __HAL_RCC_APB1_GRP1_RELEASE_RESET and
__HAL_RCC_APB1_GRP2_RELEASE_RESET</li>
</ul></li>
<li>HAL ADC driver:
<ul>
<li>Update HAL_ADC_IRQHandler by adding checks on ADC Ready flag and End
of Calibration flag</li>
<li>Add HAL_ADC_CalibrationCpltCallback() and HAL_ADC_ADCReadyCallback()
APIs</li>
<li>Add ADC_FLAG_EOCAL ADC End of Calibration interrupt flag</li>
</ul></li>
<li>HAL CORTEX driver:
<ul>
<li>Add HAL_MPU_EnableRegion() and HAL_MPU_DisableRegion() APIs</li>
</ul></li>
<li>HAL FLASH driver:
<ul>
<li>Add OB_USER_HSE_NOT_REMAPPED and OB_USER_SECURE_MUXING_EN
definitions</li>
<li>Update OB_USER_ALL definition</li>
<li>Add OB_HSE_NOT_REMAPPED_ENABLE and OB_HSE_NOT_REMAPPED_DISABLE FLASH
Option Bytes User HSE REMAP enable/disable definitions</li>
<li>Add OB_SECURE_MUXING_ENABLE and OB_SECURE_MUXING_DISABLE Option
Bytes User Multiple-bonding security enable/disable definitions</li>
<li>Update FLASH_PAGE_NB definition to compute the flash pages number
based on the flash size</li>
</ul></li>
<li>HAL I2C driver:
<ul>
<li>Update HAL_I2C_Slave_Transmit to check if the received NACK is the
correct one</li>
<li>Update I2C_WaitOnRXNEFlagUntilTimeout to check I2C_FLAG_AF
independently from I2C_FLAG_RXNE</li>
<li>Remove the unusable code in HAL_I2C_IsDeviceReady() API</li>
<li>Remove unused state defines HAL_I2C_STATE_TIMEOUT and
HAL_I2C_STATE_ERROR in HAL_I2C_StateTypeDef</li>
<li>Update I2C_WaitOnFlagUntilTimeout to handle error case.</li>
<li>Update HAL_I2C_Master_Abort_IT to support memory abort
transfer.</li>
</ul></li>
<li>HAL I2S driver:
<ul>
<li>Update HAL I2S driver to fix misplaced __HAL_LOCK and remove ‘go to’
instruction</li>
</ul></li>
<li>HAL SPI driver:
<ul>
<li>Update IT API to enable interrupts after process unlock</li>
<li>Update driver to keep state in case of error and set
HAL_SPI_STATE_READY only in case of HAL_TIMEOUT</li>
<li>Update HAL_SPI_TransmitReceive API to set the bit CRCNEXT in case of
one byte transaction</li>
</ul></li>
<li>HAL SMBUS driver:
<ul>
<li>Update SMBUS_ITErrorHandler to flash TXDR only in case of error</li>
<li>Remove unused state defines HAL_SMBUS_STATE_TIMEOUT and
HAL_SMBUS_STATE_ERROR in HAL_I2C_StateTypeDef</li>
</ul></li>
<li>HAL RCC driver:
<ul>
<li>Update HAL_RCC_GetHCLKFreq() to Compute SystemCoreClock value</li>
</ul></li>
<li>HAL RTC driver:
<ul>
<li>Remove RTC_FLAG_ITSF and RTC_CLEAR_ITSF to be aligned with reference
manual</li>
<li>Remove meaningless __HAL_RTC_INTERNAL_TIMESTAMP_ENABLE,
__HAL_RTC_INTERNAL_TIMESTAMP_DISABLE,
__HAL_RTC_INTERNAL_TIMESTAMP_GET_FLAG and
__HAL_RTC_INTERNAL_TIMESTAMP_CLEAR_FLAG macros</li>
<li>Update RTC_EXTI_LINE_TIMESTAMP_EVENT definition</li>
<li>Remove extra HAL_RTCEx_SetInternalTimeStamp() and
HAL_RTCEx_DeactivateInternalTimeStamp() definitions</li>
</ul></li>
<li>HAL TIM driver:
<ul>
<li>Add the possibility to configure the break inputs in bidirectional
mode for lite timers</li>
<li>Added system break interrupt handling in IRQ handler</li>
<li>Update interrupt flag to be cleared when the update event is
generated by software</li>
<li>Fixed some typos in code comments</li>
<li>Made HAL_TIMEx_OCN_Stop_IT and HAL_TIMEx_PWMN_Stop_IT more
generic</li>
<li>Improved HAL_TIMEx_ConfigBreakDeadTime() function
implementation</li>
<li>Improved CH4N support handling</li>
<li>Fix typo in PWM symmetric mode related constants names</li>
</ul></li>
<li>HAL USART driver:
<ul>
<li>Fixed some typos in code comments</li>
</ul></li>
<li>HAL UART driver:
<ul>
<li>Fixed some typos in code comments</li>
<li>Remove __HAL_LOCK() from
HAL_xxx_RegisterCallback()/HAL_xxx_UnRegisterCallback()</li>
<li>Fix incorrect gState check in
HAL_UART_RegisterRxEventCallback/HAL_UART_UnRegisterRxEventCallback to
allow user Rx Event Callback registration when a transmit is
ongoing</li>
<li>Update driver to avoid RTOF flag to be cleared by a transmit process
in polling mode</li>
<li>Ensure UART Rx buffer is not written beyond boundaries in case of RX
FIFO reception in Interrupt mode</li>
</ul></li>
</ul>
<h3 id="ll-drivers-updates-2"><strong>LL Drivers updates</strong></h3>
<ul>
<li>LL ADC driver:
<ul>
<li>Fixed some typos in code comments</li>
</ul></li>
<li>LL DMA driver:
<ul>
<li>Add missing LL_DMAMUX_SYNC_DMAMUX_CH3, LL_DMAMUX_REQ_GEN_DMAMUX_CH3
and LL_DMAMUX_SYNC_TIM14_OC definitions</li>
</ul></li>
<li>LL GPIO driver:
<ul>
<li>Update LL_GPIO_Init() to avoid causing quick switch to low level on
the pins</li>
</ul></li>
<li>LL RCC driver:
<ul>
<li>Remove meaningless RCC_PLL_GetFreqDomain_SYS(),
RCC_PLL_GetFreqDomain_ADC() and RCC_PLL_GetFreqDomain_I2S1() APIs
definitions</li>
</ul></li>
<li>LL TIM driver:
<ul>
<li>Removed meaningless LL_TIM_ReArmBRK() and LL_TIM_ReArmBRK2()
functions</li>
<li>Fixed some typos in code comments</li>
<li>Improve LL_TIM_BDTR_Init() implementation consistency</li>
<li>Configure complementary channels only when supported</li>
<li>Fix typo in PWM symmetric mode related constants names</li>
<li>Added LL_TIM_CC_IsEnabledPreload() API</li>
</ul></li>
<li>LL I2C driver:
<ul>
<li>Update LL_I2C_HandleTranfer function to prevent undefined behavior
of volatile usage before updating the CR2 register.</li>
</ul></li>
<li>LL SYSTEM driver:
<ul>
<li>Correct LL_SYSCFG_IsActiveFlag_CLK_CTRL() and
LL_SYSCFG_IsActiveFlag_WWDG() implementation</li>
</ul></li>
<li>LL UTILS driver:
<ul>
<li>Remove IS_LL_UTILS_SYSCLK_DIV, IS_LL_UTILS_APB1_DIV,
IS_LL_UTILS_HSI_DIV, IS_LL_UTILS_HSIKER_DIV IS_LL_UTILS_HSE_BYPASS and
IS_LL_UTILS_HSE_FREQUENCY macros</li>
<li>Remove useless LL_UTILS_ClkInitTypeDef structure</li>
<li>Correct LL_UTILS_PACKAGETYPE naming</li>
<li>Remove UTILS_HSE_FREQUENCY_MIN and UTILS_HSE_FREQUENCY_MAX
definitions</li>
</ul></li>
</ul>
<p>Note: HAL/LL Backward compatibility ensured by legacy defines.</p>
<h2 id="known-limitations-2">Known Limitations</h2>
<ul>
<li>None</li>
</ul>
<h2 id="backward-compatibility-2">Backward Compatibility</h2>
<ul>
<li>Not applicable</li>
</ul>
</div>
</div>
<div class="collapse">
<input type="checkbox" id="collapse-section3" aria-hidden="true">
<label for="collapse-section3" aria-hidden="true">V1.1.0 /
07-June-2023</label>
<div>
<h2 id="main-changes-3">Main Changes</h2>
<ul>
<li>Maintenance Release of STM32CubeC0 Firmware Package</li>
</ul>
<p><strong>HAL/LL Drivers</strong> updates</p>
<ul>
<li>HAL and LL drivers Maintenance Release for STM32C011xx / STM32C031xx
devices</li>
</ul>
<p>– <strong>HAL Drivers</strong> updates</p>
<ul>
<li><strong>HAL RCC</strong> driver
<ul>
<li>Rename the following defines:
<ul>
<li>HSE_TIMEOUT_VALUE to RCC_HSE_TIMEOUT_VALUE</li>
<li>HSI_TIMEOUT_VALUE to RCC_HSI_TIMEOUT_VALUE</li>
<li>LSI_TIMEOUT_VALUE to RCC_LSI_TIMEOUT_VALUE</li>
<li>CLOCKSWITCH_TIMEOUT_VALUE to RCC_CLOCKSWITCH_TIMEOUT_VALUE</li>
</ul></li>
</ul></li>
<li><strong>HAL RTC</strong> driver
<ul>
<li>Add __HAL_RTC_IS_CALENDAR_INITIALIZED macro</li>
</ul></li>
<li><strong>HAL TIM</strong> driver
<ul>
<li>Add __HAL_TIM_SELECT_CCDMAREQUEST macro</li>
</ul></li>
<li><strong>HAL UART</strong> driver
<ul>
<li>Add (HAL_UART_RxEventTypeTypeDef RxEventType) to the
__UART_HandleTypeDef structure</li>
<li>Add following defines:
<ul>
<li>HAL_UART_RXEVENT_TC (Transfer Complete event)</li>
<li>HAL_UART_RXEVENT_HT (Half Transfer event)</li>
<li>HAL_UART_RXEVENT_IDLE (IDLE event)</li>
</ul></li>
<li>Add HAL_UARTEx_GetRxEventType() API to provide Rx Event type (to be
called within the user implementation of Rx Event Callback)</li>
</ul></li>
<li><strong>HAL</strong> driver
<ul>
<li>Update HAL_SYSCFG_SetPinBinding() to handle properly setting of a
pin biding (w/o overwriting existing pins binding settings).</li>
<li>Update HAL_SYSCFG_GetPinBinding() to get a pin biding setting.</li>
</ul></li>
</ul>
<p>– <strong>LL Drivers</strong> updates</p>
<ul>
<li><strong>LL SYSTEM</strong> driver
<ul>
<li>Add SYSTEM_LL_PINMUX_SOURCE following defines:
<ul>
<li>LL_PINMUX_SO8_PIN1, LL_PINMUX_SO8_PIN4, LL_PINMUX_SO8_PIN5,
LL_PINMUX_SO8_PIN8, LL_PINMUX_WLCSP12_PINE2, LL_PINMUX_WLCSP12_PINF1 in
case of device <strong>STM32C011xx</strong> device</li>
<li>LL_PINMUX_WLCSP14_PINF2, LL_PINMUX_WLCSP14_PING3,
LL_PINMUX_WLCSP14_PINJ1, LL_PINMUX_WLCSP14_PINH2,
LL_PINMUX_WLCSP14_PING1, LL_PINMUX_WLCSP14_PINJ3 in case of device
<strong>STM32C031xx</strong> device</li>
</ul></li>
<li>Update LL_SYSCFG_ConfigPinMux() and LL_SYSCFG_GetConfigPinMux()
functions</li>
<li>LL_SYSCFG_ConfigPinMux() API updated to handle properly setting of a
pin binding (w/o overwriting existing pins biding settings).</li>
<li>LL_SYSCFG_GetConfigPinMux() API updated to get a pin biding
setting.</li>
</ul></li>
</ul>
<h2 id="known-limitations-3">Known Limitations</h2>
<p>N/A</p>
<h2 id="backward-compatibility-3">Backward Compatibility</h2>
<ul>
<li>HAL_SYSCFG_GetPinBinding() and LL_SYSCFG_GetConfigPinMux() are
updated.</li>
</ul>
</div>
</div>
<div class="collapse">
<input type="checkbox" id="collapse-section2" aria-hidden="true">
<label for="collapse-section2" checked aria-hidden="true">V1.0.1 /
12-January-2023</label>
<div>
<h2 id="main-changes-4">Main Changes</h2>
<ul>
<li><p>Patch Release of STM32CubeC0 Firmware Package</p></li>
<li><p>Update ADC HAL driver with proper internal sensor calibration
implementation:</p>
<ul>
<li>Helper macro “__LL_ADC_CALC_TEMPERATURE()” is not available and
macro “__LL_ADC_CALC_TEMPERATURE_TYP_PARAMS()” must be used.</li>
</ul></li>
<li><p>Update RCC LL driver by adding missing AHB Prescaler.</p></li>
</ul>
<h2 id="known-limitations-4">Known Limitations</h2>
<p>N/A</p>
</div>
</div>
<div class="collapse">
<input type="checkbox" id="collapse-section1" aria-hidden="true">
<label for="collapse-section1" checked aria-hidden="true">V1.0.0 /
09-February-2022</label>
<div>
<h2 id="main-changes-5">Main Changes</h2>
<p>First official release of HAL and LL drivers for STM32C031xx /
STM32C011xx devices</p>
<h2 id="known-limitations-5">Known Limitations</h2>
<p>N/A</p>
</div>
</div>
</section>
</div>
<footer class="sticky">
<p>For complete documentation on STM32 Microcontrollers </mark> , visit:
<span style="font-color: blue;"><a
href="http://www.st.com/stm32">www.st.com/stm32</a></span></p>
This release note uses up to date web standards and, for this reason,
should not be opened with Internet Explorer but preferably with popular
browsers such as Google Chrome, Mozilla Firefox, Opera or Microsoft
Edge.
</footer>
</body>
</html>
